import { addCart, fetchCartInfo, changeItemNum, cartItemSelected, removeItem } from "@/api/cart";
import { Toast } from "antd-mobile";
export default {
  namespace: 'cart',
  state: {
    // 购物车中所有商品
    items: [],
    // 商品总件数
    number: 0, 
    // 总价格
    price: 0,
    allChecked: true
  },
  reducers: {
    // 给购物车数据赋值
    initCart (state:any, action:any) {
      console.log(action);
      
      state.items = action.data.items;
      state.number = action.data.number;
      state.price = action.data.price;
      // 每一次计算全选状态
      state.allChecked = action.data.items.every(item => item.selected)
      return {
        ...state
      }
    }
  },
  effects: {
    // 加入购物车
    *addCart(action, {call, put}) {
      const res = yield call(addCart, action.params);
      // 提交普通reducer将值传入 修改state
      if (res.data.code === 0) {
        Toast.show({
          content: '加入购物车成功'
        })
        yield put({
          type: 'initCart', // 这里不加 模块名
          data: res.data.data
        })
      }
    },
    // 读取购物车数据
    *fetchCartInfo(action, {call, put}) {
      const res = yield call(fetchCartInfo, action.params);
      // 提交普通reducer将值传入 修改state
      if (res.data.code === 0) {
        
        yield put({
          type: 'initCart', // 这里不加 模块名
          data: res.data.data
        })
      }
    },
    // 修改购物车中购买数量
    *changeItemNum(action, {call, put}) {
      const res = yield call(changeItemNum, action.params);
      // 提交普通reducer将值传入 修改state
      if (res.data.code === 0) {
        Toast.show({
          content: '修改数量成功'
        })
        yield put({
          type: 'initCart', // 这里不加 模块名
          data: res.data.data
        })
      }
    },
    // 修改购物车商品选中状态
    *cartItemSelected(action, {call, put}) {
      const res = yield call(cartItemSelected, action.params);
      // 提交普通reducer将值传入 修改state
      if (res.data.code === 0) {
        Toast.show({
          content: '修改选中状态成功'
        })
        yield put({
          type: 'initCart', // 这里不加 模块名
          data: res.data.data
        })
      }
    },
     // 删除商品
     *delItems(action, {call, put}) {
      const res = yield call(removeItem, action.params);
      // 提交普通reducer将值传入 修改state
      if (res.data.code === 0) {
        Toast.show({
          content: '删除商品成功'
        })
        yield put({
          type: 'initCart', // 这里不加 模块名
          data: res.data.data
        })
      }
      if (res.data.code === 700) {
        // 购物车已经没有商品
        yield put({
          type: 'initCart', // 这里不加 模块名
          data: {
            items: [],
            price: 0,
            number: 0
          }
        })
      }
    },
  }
}